/**
 * 个人工具类模块
 */

import md5 from 'js-md5';
import { SALT, PUBLIC_SIGN } from '@/utils/const';

// 打印函数
export function printLog(title, content1, content2) {
  console.group(title);
  console.log(content1);
  if (content2) {
    console.log(content2);
  }
  console.groupEnd();
}


// 加密传输参数通用方法封装 => 对原有对象进行修改
export function encryptionParams(data = {}) {
  // md5加密参数列表
  let md5List = [];

  // 将请求参数与公共参数合并到一个对象中
  Object.keys(PUBLIC_SIGN).forEach(item => data[item] = PUBLIC_SIGN[item])

  // 根据对象中的key进行排序「a-z」 key=value&key2=value2
  // 参数value为空不进入加密
  Object.keys(data).sort().filter((item) => {
    // JS中 "" == 0 所以先判断类型
    if ((typeof data[item] == "string" && data[item] == "") || typeof data[item] == "object") {
      console.log(`${item} 不进入加密`);
    } else {
      md5List.push(`${item}=${data[item]}&`)
    }
  })

  // 加盐
  md5List.push(SALT);

  // 加上签名参数进行请求
  data["sign"] = md5(md5List.join(""));

  // 返回处理后的对象数据
  return data;
}


/**
 * @method 通过一个类的解析方式,转换一个列表内部属性并返回一个新列表
 * @param {Array} oldList    原列表
 * @param {class} classWay   类的解析方式
 * @return newList 新列表或空字符串
 **/
const classToNewList = (oldList, classWay, ...params) => {
  // null == undefined
  if (oldList == "" || oldList == undefined) {
    return "";
  }
  let li = [];
  if (oldList.length) {
    oldList.forEach(item => {
      li.push(new classWay(item, ...params));
    })
    return li;
  } else {
    return "";
  }
}

// 存储localStorage
const setStore = (name, content) => {
  if (!name) return;
  if (typeof content !== 'string') {
    content = JSON.stringify(content);
  }
  window.localStorage.setItem(name, content);
}

// 获取localStorage
const getStore = name => {
  if (!name) return;
  return window.localStorage.getItem(name);
}

// 删除localStorage
const removeStore = name => {
  if (!name) return;
  window.localStorage.removeItem(name);
}

// 设置cookie
function setCookie(name, value, day) {
  let date = new Date();
  date.setDate(date.getDate() + day);
  document.cookie = name + '=' + value + ';expires=' + date;
};

// 获取cookie
function getCookie(name) {
  let reg = RegExp(name + '=([^;]+)');
  let arr = document.cookie.match(reg);
  if (arr) {
    return arr[1];
  } else {
    return '';
  }
};

// 删除cookie
function delCookie(name) {
  setCookie(name, null, -1);
};

/**
 * @method 时间戳
 * @param {*} timestamp  时间戳
 */
const timestampToTime = (timestamp) => {
  let date = new Date(timestamp) //时间戳为10位需*1000，时间戳为13位的话不需乘1000
  let Y = date.getFullYear() + '-'
  let M =
    (date.getMonth() + 1 < 10 ?
      '0' + (date.getMonth() + 1) :
      date.getMonth() + 1) + '-'
  let D =
    (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '
  let h =
    (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'
  let m =
    (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) +
    ':'
  let s =
    date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
  return Y + M + D + h + m + s
};

// 导出给外部使用
export {
  timestampToTime,
  setStore,
  getStore,
  removeStore,
  setCookie,
  getCookie,
  delCookie,
  classToNewList
}